# -*- coding: utf-8 -*-

#import
import os
import sqlite3 as lite
from time import gmtime, strftime

path_dir = "./blacklists/" #path dell'archivio
name_db_domains = "domains_v1.0.db" #nome del db su file per i domini
todate = strftime("%Y-%m-%d %H:%M:%S", gmtime()) #stringa della data di attivazione dello script

os.system("wget -q -Y on 'http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist' -O blacklists.tar.gz")

os.system("tar zxvf blacklists.tar.gz")
           
os.system("rm blacklists.tar.gz")

con_domains = lite.connect(name_db_domains)
#con_urls.text_factory = str #If you want to use 8-bit strings instead of unicode string in sqlite3,
                            #set approptiate text_factory for sqlite connection:

with con_domains:
    cur_domains = con_domains.cursor()    
    cur_domains.execute('''CREATE TABLE IF NOT EXISTS domainsURLBlackList
                        (id INTEGER PRIMARY KEY, domain TEXT, categoria TEXT, data TEXT, fonte TEXT, reputazione TEXT, path TEXT)''')

old_category = ""
reputation = ""
for elem_category in os.listdir(path_dir):
    reputation = "white list"
    if os.path.isdir(path_dir + elem_category) == True:
        print "Immissione nel db della categoria:", elem_category
        if elem_category == "ads" or elem_category == "dialers" or elem_category == "virusinfected" or elem_category == "malware":
            reputation = "black list" #inutile perchè modifico la tabella dopo
        for document in os.listdir(path_dir + elem_category):
            if document == "domains":
                print "domains", elem_category #stampa di test
                f = open(path_dir + elem_category + "/" + document)
                while True:
                    line = f.readline()
                    elem_domain = line[:-1]
                    if not elem_domain == "": #evito di inserire le linee vuote
                        cur_domains.execute("INSERT INTO domainsURLBlackList(domain,categoria,data,fonte,reputazione) VALUES (?,?,?,?,?)",
                                            (elem_domain, elem_category, todate, "_URLBlackList_", reputation))
                    if not line: break
                con_domains.commit()
                f.close()
print "Fine del salvataggio dall'archivio di URLBlackList.com sul db dei domini."
print "Elaborazione db per eliminazione ridondanze: concanetazione categorie multiple per lo stesso dominio."
cur_domains.execute('''CREATE TABLE IF NOT EXISTS domains
                (id INTEGER PRIMARY KEY, domain TEXT, categoria TEXT, data TEXT, fonte TEXT, reputazione TEXT, path TEXT)''')
cur_domains.execute('''INSERT INTO domains
                        SELECT id,domain, GROUP_CONCAT(categoria), data, fonte, reputazione, path  FROM
                        (SELECT id,domain, categoria, data, fonte, reputazione, path FROM domainsURLBLackList) GROUP BY domain''')
print "Fine Elaborazione db per eliminazione ridondanze: concanetazione categorie multiple per lo stesso dominio."
print "Cancellazione tabella temporanea per l'elaborazione."
cur_domains.execute('''DROP TABLE domainsURLBlackList''')
print "Fine cancellazione."
print "Update tabella per le informazioni black listed"
#BISOGNA TOGLIERE ADS DAI BLACK LISTED?
cur_domains.execute('''UPDATE domains SET reputazione="black list" WHERE categoria LIKE "%ads%" OR categoria LIKE "%dialers%"
                        or categoria LIKE "%virusinfected%" or categoria LIKE "%malware%"''')
print "Update terminato."
con_domains.commit()
con_domains.close()
